package net.xo68.destiny.starter.worker;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import net.xo68.destiny.contract.common.SystemConstants;
import net.xo68.destiny.core.util.PathUtils;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * 命运调度工作节点配置
 * @author wuxie
 * @version 2020-10-26
 */
@Slf4j
@Data
@Configuration
@ConfigurationProperties("destiny.worker")
public class SchedulerWorkerProperties {

    /**
     * 是否启用
     */
    private boolean enable=true;
    /**
     * 工作组英文名称
     */
    private String workGroup = SystemConstants.DEFAULT_WORK_GROUP;
    /**
     * 管理端host列表，多个用","分隔,如：12.11.18.55:8080,12.11.18.56:8080,12.11.18.57:8080
     */
    private String manager;

    /**
     * 工作路径
     */
    private String workPath="./data";
    /**
     * 日志输出格式,格式：{time:'yyyy-MM-dd HH:mm:ss.SSS'} {thread} {class} {line} {massage}\n
     */
    private String loggerPattern="{time:'yyyy-MM-dd HH:mm:ss'} {massage}\n";
    private String loggerSuffix=".log";
    /**
     * 日志刷盘时间间隔，单位：毫秒，默认200毫秒
     */
    private long loggerFlushMilli=200;

    /**
     * 处理回复处理线程数
     */
    private int handleReplyThreadCount=2;
    /**
     * 处理回复延迟周期，单位：毫秒，默认：1000ms
     */
    private long handleReplyDelayMilli=1000L;
    /**
     * 任务处理状态回复每批最大数
     */
    private int handleReplyBatchMax=512;
    /**
     * 任务处理回复最大延时记录数
     */
    private int handleReplyMaxDelay=90;



    /**
     * 控制台编码，不配置时，默认linux:utf-8,windows:gbk
     */
    private String consoleEncoding;

    /**
     * 工作空间路径
     * @return
     */
    public String workspacePath(){
        Path path = Paths.get(this.workPath);
        File file=path.toFile();
        if(!file.exists()){
            file.mkdirs();
        }
        return PathUtils.rinsePath(file.getAbsolutePath());
    }
    /**
     * 日志路径
     * @return
     */
    public String loggerPath(){
        Path path = Paths.get(workspacePath(),"logs");
        File file=path.toFile();
        if(!file.exists()){
            file.mkdirs();
        }
        return PathUtils.rinsePath(file.getAbsolutePath());
    }
    public String sourcePath(){
        Path path = Paths.get(workspacePath(),"src");
        File file=path.toFile();
        if(!file.exists()){
            file.mkdirs();
        }
        return PathUtils.rinsePath(file.getAbsolutePath());
    }
    public String configPath(){
        Path path = Paths.get(workspacePath(),"config");
        File file=path.toFile();
        if(!file.exists()){
            file.mkdirs();
        }
        return PathUtils.rinsePath(file.getAbsolutePath());
    }

    /**
     * 任务处理回复信息存储目录
     * @return
     */
    public String replyPath(){
        Path path = Paths.get(workspacePath(),"reply");
        File file=path.toFile();
        if(!file.exists()){
            file.mkdirs();
        }
        return PathUtils.rinsePath(file.getAbsolutePath());
    }

}
